home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) 1994 Burra Gopal, Udi Manber. All Rights Reserved. */
-
- /*
- * main_uncast.c: uses functions in hash.c and uncast.c to implement "uncast".
- */
-
- #include "defs.h"
-
- extern char **environ;
- usage(progname)
- char *progname;
- {
- fprintf(stderr, "\nThis is uncast version %s. Copyright (c) %s, University of Arizona.\n\n", GLIMPSE_VERSION, GLIMPSE_DATE);
- fprintf(stderr, "usage: %s [-help] [-F] [-H dir] [-V] [-d] [-o] [-r] [-s] [-y] sourcefiles\n", progname);
- fprintf(stderr, "summary of options (for a more detailed version, see 'man cast'):\n");
- fprintf(stderr, "-help: output this menu\n");
- fprintf(stderr, "-d: DO NOT remove source files after uncompress\n");
- /* fprintf(stderr, "-e: is used with files NOT compressed for easy search\n"); */
- fprintf(stderr, "-o: DO NOT overwrite the existing clear file (if any)\n");
- fprintf(stderr, "-r: uncompress recursively\n");
- fprintf(stderr, "-s: proceed silently and output the names of the uncompressible files\n");
- fprintf(stderr, "-y: DO NOT prompt and always overwrite when used without -o\n");
- fprintf(stderr, "-F: expect NAMES of files on stdin rather than data if there are no sourcefiles\n");
- fprintf(stderr, "-H dir: the directory for dictionaries is 'dir' (default ~)\n");
- fprintf(stderr, "\n");
- exit(1);
- }
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- char **filev;
- int filec;
- int i; /* counter on argc, and later, filec */
- char freq_file[MAX_LINE_LEN];
- char string_file[MAX_LINE_LEN];
- char comp_dir[MAX_LINE_LEN];
- char name[MAX_LINE_LEN];
- char outname[MAX_LINE_LEN];
- char *home;
- int FLAGS;
- int num_read;
- char buffer[SIGNATURE_LEN];
-
- filev = (char **)malloc(sizeof(char *) * argc);
- memset(filev, '\0', sizeof(char *)*argc);
- filec = 0;
- comp_dir[0] = '\0';
- freq_file[0] = '\0';
- string_file[0] = '\0';
- FLAGS = 0;
- FLAGS |= TC_ERRORMSGS | TC_REMOVE | TC_OVERWRITE | TC_EASYSEARCH;
-
- /* Look at options */
- i=1;
- while (i < argc) {
- if (filec == 0 && !strcmp(argv[i], "-d")) {
- FLAGS &= ~TC_REMOVE;
- i ++;
- }
- else if (filec == 0 && !strcmp(argv[i], "-V")) {
- printf("\nThis is uncast version %s, %s.\n\n", CAST_VERSION, CAST_DATE);
- return 0;
- }
- /*
- else if (filec == 0 && !strcmp(argv[i], "-e")) {
- FLAGS &= ~TC_EASYSEARCH;
- i ++;
- }
- */
- if (filec == 0 && !strcmp(argv[i], "-help")) {
- return usage(argv[0]);
- }
- else if (filec == 0 && !strcmp(argv[i], "-o")) {
- FLAGS &= ~TC_OVERWRITE;
- i ++;
- }
- else if (filec == 0 && !strcmp(argv[i], "-r")) {
- FLAGS |= TC_RECURSIVE;
- i ++;
- }
- else if (filec == 0 && !strcmp(argv[i], "-s")) {
- FLAGS |= TC_SILENT;
- i ++;
- }
- else if (filec == 0 && !strcmp(argv[i], "-y")) {
- FLAGS |= TC_NOPROMPT;
- i ++;
- }
- else if(filec == 0 && !strcmp(argv[1], "-F")) {
- FLAGS |= TC_FILENAMESONSTDIN;
- i ++;
- }
- else if (filec == 0 && !strcmp(argv[i], "-H")) {
- if (i + 1 >= argc) {
- fprintf(stderr, "directory not specified after -H\n");
- return usage(argv[0]);
- }
- strcpy(comp_dir, argv[i+1]);
- i+=2;
- }
- else {
- filev[filec++] = argv[i++];
- }
- }
-
- if (comp_dir[0] == '\0') {
- if ((home = (char *)getenv("HOME")) == NULL) {
- getcwd(comp_dir, MAXNAME-1);
- fprintf(stderr, "using working-directory '%s' to locate index\n", comp_dir);
- }
- else strncpy(comp_dir, home, MAXNAME);
- }
- strcpy(string_file, comp_dir);
- strcat(string_file, "/");
- strcat(string_file, DEF_STRING_FILE);
- strcpy(freq_file, comp_dir);
- strcat(freq_file, "/");
- strcat(freq_file, DEF_FREQ_FILE);
- if (!initialize_tuncompress(string_file, freq_file, FLAGS)) exit(2);
-
- if (FLAGS & TC_SILENT) FLAGS &= ~TC_ERRORMSGS;
-
- /* now compress each file in filev array: if no files specified, compress stdin and put it on stdout */
- if (filec == 0) {
- if (FLAGS & TC_FILENAMESONSTDIN) {
- while (fgets(name, MAX_LINE_LEN, stdin) == name) {
- tuncompress_file(name, outname, FLAGS);
- }
- }
- else {
- num_read = fread(buffer, 1, SIGNATURE_LEN - 1, stdin);
- if (!tuncompressible(buffer, num_read)) {
- fprintf(stderr, "signature does not match -- cannot uncompress %s\n", filev[i]);
- return -1;
- }
- tuncompress(stdin, -1, stdout, -1, FLAGS);
- }
- }
- else for (i=0; i<filec; i++) {
- strcpy(name, filev[i]);
- tuncompress_file(name, outname, FLAGS);
- }
- return 0;
- }
-
-